/**
 * copyright (c) 2017-2023 厦门风领科技有限公司
 * https://www.fengling.cn/
 * 
 * 适配层
 * zengbinsi
 * 2020-08-15 10:08:05
 * 2023-10-23 15:31:27
 */
console.log('[TS-API] ===>>>', 'Load API adapter.');
window.gg = window.gg || {};
let _adapter = {};

// // 进行平台判断
(function () {
    // 平台枚举
    gg.EPlatformType = {
        MINI_GAME_WX: 'MINI_GAME_WX', // 微信小游戏
        MINI_GAME_QQ: 'MINI_GAME_QQ', // QQ小游戏
        MINI_GAME_TT: 'MINI_GAME_TT', // 字节小游戏

        QUICK_GAME_OPPO: 'QUICK_GAME_OPPO', // OPPO小游戏
        QUICK_GAME_VIVO: 'QUICK_GAME_VIVO', // VIVO小游戏

        GAME_CENTER_OPPO: 'GAME_CENTER_OPPO', // OPPO游戏中心
        GAME_CENTER_VIVO: 'GAME_CENTER_VIVO', // VIVO游戏中心
        GAME_CENTER_HW: 'GAME_CENTER_HW', // 华为游戏中心
        GAME_CENTER_MI: 'GAME_CENTER_MI', // 小米游戏中心

        GAME_IOS_APPSTORE: 'GAME_IOS_APPSTORE', // appstore
        GAME_ANDROID_GOOGLE: 'GAME_ANDROID_GOOGLE', // google play
        GAME_ANDROID_LY233: 'GAME_ANDROID_LY233', // 233乐园
        GAME_ANDROID_BOX4399: 'GAME_ANDROID_BOX4399', // 4399盒子
        GAME_ANDROID_MOMOYU: 'GAME_ANDROID_MOMOYU', // 摸摸鱼
        GAME_ANDROID_DOUYIN: 'GAME_ANDROID_DOUYIN', // 抖音
        GAME_ANDROID_COMMON: 'GAME_ANDROID_COMMON', // 通用包

        H5: 'H5',
        NATIVE: 'NATIVE',
    };
    // 渠道枚举
    gg.EChannelType = {
        UNKNOWN: 0,             // 未知

        // Android原生渠道
        AND_TT: 103,            // 国内	抖音	
        AND_OPPO: 104,          // 国内	OPPO	
        AND_VIVO: 105,          // 国内	VIVO	
        AND_HW: 106,            // 国内	华为	
        AND_MI: 107,            // 国内	小米	
        AND_JIUYOU: 108,        // 国内	九游	
        AND_YYB: 109,           // 国内	应用宝	
        AND_TAPTAP: 110,        // 国内	taptap	
        AND_BILIBILI: 111,      // 国内	哔哩哔哩	
        AND_MOMOYU: 112,        // 国内	摸摸鱼	
        AND_OHAYOO: 113,        // 国内	ohayoo	
        AND_360: 114,           // 国内	360	
        AND_MEIZU: 115,         // 国内	魅族	
        AND_BAIDU: 116,         // 国内	百度	
        AND_LIANXIANG: 117,     // 国内	联想	
        AND_KUPAI: 118,         // 国内	酷派	
        AND_JINLI: 119,         // 国内	金立	
        AND_4399: 120,          // 国内	4399	
        AND_GOOGLE_PLAY: 121,   // 海外 Google商店
        AND_MODO: 102,          // 摩多

        // iOS原生渠道
        IOS_APPSTORE_CN: 301,        // 国内 AppStore（中国区特供版）
        IOS_APPSTORE_GLOBAL: 302,    // 海外 AppStore（全球或者海外版本）
        IOS_MODO: 101,               // 摩多

        // H5渠道
        H5_UC: 201, 			// 国内	UC小游戏
        H5_LIEBAO: 202, 		// 国内	猎豹小游戏
        H5_4399: 203, 			// 国内	4399

        // 快游戏渠道
        QG_OPPO: 401,           // 国内 OPPO快游戏
        QG_VIVO: 402,           // 国内 VIVO快游戏
        QG_HW: 403,             // 国内 华为快游戏
        QG_MI: 404,             // 国内 小米快游戏

        // 小游戏渠道
        MINI_GAME_WX_AND: 2,  // 国内 微信小游戏(Android)
        MINI_GAME_WX_IOS: 1,  // 国内 微信小游戏(iOS)
        MINI_GAME_TT_AND: 503,  // 国内 字节小游戏(Android)
        MINI_GAME_TT_IOS: 504,  // 国内 字节小游戏(iOS)
        MINI_GAME_QQ_AND: 505,  // 国内 QQ小游戏(Android)
        MINI_GAME_QQ_IOS: 506,  // 国内 QQ小游戏(iOS)
        MINI_GAME_KS_AND: 507,  // 国内 快手小游戏(Android)
        MINI_GAME_KS_IOS: 508,  // 国内 快手小游戏(iOS)
    };
    // 当前渠道
    gg.channel = gg.EChannelType.UNKNOWN;
    gg.getChannel = () => { return window.channel || gg.channel; };

    if (window.qq) {
        gg.platform = gg.EPlatformType.MINI_GAME_QQ;
        gg.channel = cc.sys.os === cc.sys.OS_IOS ? gg.EChannelType.MINI_GAME_QQ_IOS : gg.EChannelType.MINI_GAME_QQ_AND;
    } else if (window.tt) {
        gg.platform = gg.EPlatformType.MINI_GAME_TT;
        gg.channel = cc.sys.os === cc.sys.OS_IOS ? gg.EChannelType.MINI_GAME_TT_IOS : gg.EChannelType.MINI_GAME_TT_AND;
        _adapter = window.tt;
    } else if (window.qg && cc.sys.platform !== cc.sys.VIVO_GAME) {
        gg.platform = gg.EPlatformType.QUICK_GAME_OPPO;
        gg.channel = gg.EChannelType.QG_OPPO;
        _adapter = window.qg;
    } else if (window.qg) {
        gg.platform = gg.EPlatformType.QUICK_GAME_VIVO;
        gg.channel = gg.EChannelType.QG_VIVO;
        _adapter = window.qg;
    } else if (cc.sys.isBrowser) {
        gg.platform = gg.EPlatformType.H5;
    } else if (window.wx && !cc.sys.isNative) {
        // 必须在h5之后判断，微信流量器接入微信的js-sdk后也会有wx对象
        gg.platform = gg.EPlatformType.MINI_GAME_WX;
        gg.channel = cc.sys.os === cc.sys.OS_IOS ? gg.EChannelType.MINI_GAME_WX_IOS : gg.EChannelType.MINI_GAME_WX_AND;
        _adapter = window.wx;
    } else if (cc.sys.isNative) {
        //获取渠道标识
        let platformType;
        if (cc.sys.os === cc.sys.OS_IOS) {
            gg.isIOS = true;
            platformType = gg.EPlatformType.GAME_IOS_APPSTORE;
        } else {
            gg.isIOS = false;
            platformType = gg.jsb.getChannel();
        }
        gg.isAndroid = !gg.isIOS;
        gg.platform = platformType || gg.EPlatformType.NATIVE;

        switch (platformType) {
            case gg.EPlatformType.GAME_IOS_APPSTORE: gg.isAppStore = true; break;
            case gg.EPlatformType.GAME_ANDROID_GOOGLE: gg.isGooglePlay = true; break;
            case gg.EPlatformType.GAME_ANDROID_DOUYIN: gg.isDouyin = true; break;
            case gg.EPlatformType.GAME_CENTER_MI: gg.isGameCenterMI = true; break;
            case gg.EPlatformType.GAME_CENTER_HW: gg.isGameCenterHW = true; break;
            case gg.EPlatformType.GAME_ANDROID_LY233: gg.isAndroidLY123 = true; break;
            case gg.EPlatformType.GAME_ANDROID_BOX4399: gg.isAndroidBox4399 = true; break;
            case gg.EPlatformType.GAME_ANDROID_MOMOYU: gg.isAndroidMMY = true; break;
            case gg.EPlatformType.GAME_CENTER_OPPO: gg.isGameCenterOPPO = true; break;
            case gg.EPlatformType.GAME_CENTER_VIVO: gg.isGameCenterVIVO = true; break;
            default:
                break;
        }
    }

    gg.isMiniGameWX = gg.platform === gg.EPlatformType.MINI_GAME_WX;
    gg.isMiniGameQQ = gg.platform === gg.EPlatformType.MINI_GAME_QQ;
    gg.isMiniGameTT = gg.platform === gg.EPlatformType.MINI_GAME_TT;
    gg.isQuickGameOPPO = gg.platform === gg.EPlatformType.QUICK_GAME_OPPO;
    gg.isQuickGameVIVO = gg.platform === gg.EPlatformType.QUICK_GAME_VIVO;

    gg.isMiniGame = gg.isMiniGameWX || gg.isMiniGameQQ || gg.isMiniGameTT;
    gg.isQuickGame = gg.isQuickGameOPPO || gg.isQuickGameVIVO;

    gg.isH5 = gg.platform === gg.EPlatformType.H5;
    gg.isNative = cc.sys.isNative && !gg.isMiniGame && !gg.isQuickGame;

    _adapter.error && (_adapter.error = gg.error);
    Object.assign(gg, _adapter);
})();

/**通用适配 */
(function () {
    /** 显示系统吐司提示 */
    if (_adapter.showToast) {
        gg.showToast = (data) => {
            let obj = {};
            let title = data.title;
            let duration = data.duration;
            if (gg.isQuickGameVIVO) {
                duration = duration > 1.5 ? 1 : 0;
                obj = { message: gg.i18nString(title), duration };
            } else {
                duration *= 1000;
                obj = { title: gg.i18nString(title), duration };
            }
            _adapter.showToast(obj);
        };
    }
})();


/*=========监听游戏事件========='*/
(function () {
    if (!cc.game || !cc.game.on) { return; }

    // 游戏显示，使用这个事件我们可以监听游戏在Native平台上从后台被唤醒的事件，从而对游戏进行一些必要的处理。
    cc.game.on(cc.game.EVENT_SHOW, (data) => {
        gg.systemEvent && gg.systemEvent.emit && gg.systemEvent.emit(cc.game.EVENT_SHOW, data);
    });

    // 当游戏被挂起到后台时，Creator会分发游戏隐藏事件  
    cc.game.on(cc.game.EVENT_HIDE, (data) => {
        gg.systemEvent && gg.systemEvent.emit && gg.systemEvent.emit(cc.game.EVENT_HIDE, data);
    });

    // 游戏初始化完成
    cc.game.on(cc.game.EVENT_ENGINE_INITED, (data) => {
        gg.systemEvent && gg.systemEvent.emit && gg.systemEvent.emit(cc.game.EVENT_ENGINE_INITED, data);
    });

    // 如果需要在渲染初始化完成时实现逻辑，可以通过EVENT_RENDERER_INITED事件来实现。
    cc.game.on(cc.game.EVENT_RENDERER_INITED, (data) => {
        gg.systemEvent && gg.systemEvent.emit && gg.systemEvent.emit(cc.game.EVENT_RENDERER_INITED, data);
    });
})();

// 框架初始化
(function () {
    gg.setKeepScreenOn({ keepScreenOn: true });
})();